23

» WarCraft 3 / Интерфейс игрока

Похожие вопросы:

ответ
Никак
ответ
там находится граница рендеринга 3d сцены, расширить эту границу можно сменив acpect ratio (естественно, просто картой это не сделать, добро пожаловать в storm.dll)
ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
ответ
Странно, попробуй тогда еще нестандартные кланы и фиксированные параметры игрока. Рамка в синематике (леттербокс режиме) должна быть та же, что и игровой интерфейс.

23

» WarCraft 3 / SquareRoot

Похожие вопросы:

ответ
GF RaiseD:
Нашёл систему, где звук передаётся в таймер, который истекает через 0 секунд. В результате один и тот же звук может проигрываться несколько раз без всяких проблем. В инетике пишут мол это такой баг движка.
ответ
BaHeK:
Darknessay, я имел ввиду изначальное расстояние между объектами.
Вот нарисовал схематично.
Обозначим расстояние которое прошёл 1 юнит за х. Красная линия это путь который прошел юнит 2 до встречи. Двигались они одинаковое время, значит составим равенство(s1 и s2 это скорости) и немного преобразуем.
sqrt(a^2 + (b-x)^2)/s1 = x/s2
s1^2(a^2 + b^2)x^2 + 2*s1^2*b*x - s1^2(a^2 + b^2) = 0
Решаем полученное уравнение и получаем
x1 = (-2*s1^2*b + sqrt((2*s1^2*b)^2 + 4*(s2^2 - s1^2)*s1^2(a^2 + b^2))) / (2*s1^2(a^2 + b^2))
x2 = (-2*s1^2*b - sqrt((2*s1^2*b)^2 + 4*(s2^2 - s1^2)*s1^2(a^2 + b^2))) / (2*s1^2(a^2 + b^2))
Искомый угол равен arctg((b-x)/a).
Вод мою систему такой расчет не подойдет.
GF RaiseD:
Это не в одну строку посчитать
function getTargetOffset takes unit Caster, unit Target, real targetSpeed, real missileSpeed returns real

local real x1 = GetUnitX(Caster)
local real x2 = GetUnitX(Target)
local real x3

local real X4 //Координата X точки пересечения

local real y1 = GetUnitY(Caster)
local real y2 = GetUnitY(Target)
local real y3

local realY4 //Координата Y точки пересечения

local real targetSpeed
local real missileSpeed

local real distancex1x2 = Sqrt(Pow(x2-x1,2)+Pow(y2-y1,2))
local real distancex1x3
local real distanceX4Y4

set x3 = GetUnitX(Target)+targetSpeed*distaancex1x2/missileSpeed*Cos(GetUnitFacing(Target))*bj_DEGSTORAD
set y3 = GetUnitY(Target)+targetSpeed*distaancex1x2/missileSpeed*Sin(GetUnitFacing(Target))*bj_DEGSTORAD

set distaancex1x3 = Sqrt(Pow(x3-x1,2)+Pow(y3-y1,2))

set X4 = GetUnitX(Target)+targetSpeed*distancex1x2/missileSpeed*distancex1x3/distancex1x2*Cos(GetUnitFacing(Target))*bj_DEGSTORAD

set Y4 = GetUnitY(Target)+targetSpeed*distancex1x2/missileSpeed*distancex1x3/distancex1x2*Sin(GetUnitFacing(Target))*bj_DEGSTORAD

set Caster = null
set Target = null

set distanceX4Y4 = Sqrt(Pow(X4-x2,2)+PowY4-y2,2)) // Опережение (по отношению к повороту юнита-цели)

return distanceX4Y4

endfunction

Если что - я не проверял. Но должно бы работать.
Если тебе нужен угол с точки x2 на точку x3, определяется он так:
Atan2(y3-y2,x3-x2)*bj_RADTODEG
Убрал синтаксические ошибки, немного "допилил" - не хочет работать.
Всем привет работяги, я сам справился. Проверил: всё работает.
//===============Вспомогательные_функции================
function GetAngleXY takes real x, real y, real xx, real yy returns real
    return bj_RADTODEG * Atan2(yy - y, xx - x)
endfunction

function GetDisXY takes real x, real y, real xx, real yy returns real
    return SquareRoot((xx-x) * (xx-x) + (yy-y) * (yy-y))
endfunction

function GetPolarX takes real x, real f, real d returns real
return x + Cos(f*0.0174)*d
endfunction

function GetPolarY takes real y, real f, real d returns real
return y + Sin(f*0.0174)*d
endfunction

//=======================Основная часть=======================
function GetTargetOffset takes unit host, unit target, real speedm returns real
local real speedt = GetUnitMoveSpeed(target)
local real x = GetUnitX(host)
local real y = GetUnitY(host)
local real xx = GetUnitX(target)
local real yy = GetUnitY(target)
local real fac = GetUnitFacing(target)
local real dis = GetDisXY(x,y,xx,yy)
local real time = dis/speedm
local real dispost = GetDisXY(xx,yy,GetPolarX(xx,fac,time*speedt),GetPolarY(yy,fac,time*speedt))
local real X = GetPolarX(xx,fac,dispost) //нужные координаты цели
local real Y = GetPolarY(yy,fac,dispost)
    return GetAngleXY(x,y,X,Y)//возвращает угол который нужен для корректировки стрельбы
endfunction
ответ
nvc123:
Bornikkeny, сделал специально чтобы доказать тебе что ты несёшь бред
даже 2 скрина приложил
думаю закинуть библиотеки сможешь сам (в папку *твой jngp*\AdicHelper\lib)
Хорошо группы реализуешь как альтернативу unit[array]. Я тоже самое получил.
nvc123, и всё же твой хук не тот что мне нужен.
Я решил проблему, спасибо что дал идею обрабатывать движение внутри структуры, а не в стеке.
кот
library Hook initializer Init_Hook uses LibMath

globals
    mhook   ahook[100]
    integer ihook = -1
endglobals
    
struct mhook
        unit       host = null
        unit       target = null
        real       face = 0
        real       speed = 0
        real       dis = 0
        real       dismax = 0
        integer    chaini = 0
        unit       chain[50]
        real       scale = 0
        integer    move = 1
        integer    i = 0
		
		
        static method Create takes unit host, real tx, real ty, real scale returns mhook
        local mhook h = mhook.create()
        local integer i = GetPlayerId(GetOwningPlayer(host))
        local real x = GetUnitX(host)
        local real y = GetUnitY(host)
        local real f = GetAngleXY(x,y,tx,ty)
            set h.host = host
            set h.face = f
            set h.speed = 600
            set h.dismax = 1400
            set h.scale = scale
            set h.chain[0] = CreateUnit(Player(i),'h007',GetPolarX(GetUnitX(host),f,h.scale/2),GetPolarY(GetUnitY(host),f,h.scale/2),f)
            set h.i = i
            call UnitAddAbility(h.chain[0],'Amrf')
            call UnitAddAbility(h.chain[0],'Amrf')
            call SetUnitFlyHeight(h.chain[0],50,0)
            call SetUnitPathing(h.chain[0],false)
            return h
        endmethod
        
        method Start takes nothing returns boolean
            if ihook < 1000 then  
                set ihook = ihook + 1
                set ahook[ihook] = this
                return true
            else
                return false
            endif
        endmethod
        
        method Destroy takes nothing returns nothing
        local integer i = 0
            loop
            exitwhen i > ihook
                if ahook[i] == this then
                    set ahook[i] = ahook[ihook]
                    set ahook[ihook] = 0
                    set ihook = ihook - 1
                    set i = ihook // выход из цикла
                endif
            set i = i + 1
            endloop
            set this.target = null
            set this.host = null
            call this.destroy()
        endmethod
        
        method Move takes nothing returns nothing
        local integer i1 = 0
        local integer l = 0
        local real x
        local real y
        local real xh
        local real yh
        local real f
            if move == 1
                set dis = dis + speed*0.025
                loop
                 exitwhen i1 > .chaini
                    set x = GetUnitX(.chain[i1])
                    set y = GetUnitY(.chain[i1])
                    if i1 > 0 then
                        set f = GetAngleXY(x,y,GetUnitX(.chain[i1-1]),GetUnitY(.chain[i1-1]))
                        call SetUnitX(.chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(.chain[i1],GetPolarY(y,f,.speed*0.025))
                    else    
                        set f = face
                        call SetUnitX(chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(chain[i1],GetPolarY(y,f,.speed*0.025))
                    endif
                    call SetUnitFacing(chain[i1],f)
                 set i1 = i1 + 1
                endloop
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set f = GetAngleXY(GetUnitX(.host),GetUnitY(.host),x,y)
                set xh = GetPolarX(GetUnitX(.host),f,.scale/2)
                set yh = GetPolarY(GetUnitY(.host),f,.scale/2)
                //Create==================
                
                if GetDisXY(xh,yh,x,y) >= .scale/2 then
                    set chaini = chaini + 1
                    set chain[chaini] = CreateUnit(Player(.i),'h007',xh,yh,f)
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call SetUnitFlyHeight(.chain[.chaini],50,0)
                endif
                if dis > dismax then
                    set move = 0
                endif
            else
                //REVERSE=============
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                set chain[chaini+1] = host
                loop
                exitwhen l > chaini
                        set x = GetUnitX(chain[l])
                        set y = GetUnitY(chain[l])
                        //if chain[chaini] == null then
                        //    set f = GetAngleXY()
                        //endif
                        set f = GetAngleXY(x,y,GetUnitX(chain[l+1]),GetUnitY(chain[l+1]))
                        call SetUnitX(chain[l],GetPolarX(x,f,speed*0.025))
                        call SetUnitY(chain[l],GetPolarY(y,f,speed*0.025))
                        call SetUnitFacing(chain[l],f-180)
                set l = l + 1
                endloop
                //Destroy==================
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                if GetDisXY(GetUnitX(chain[chaini]),GetUnitY(chain[chaini]),GetUnitX(host),GetUnitY(host)) < 100 then
                    call RemoveUnit(chain[chaini])
                    set chain[chaini] = null
                    set chaini = chaini - 1
                    if chaini == -1 then
                        call .Destroy()
                    endif
                endif
            endif
        endmethod
        
endstruct

private function Engine takes nothing returns nothing
local integer i = 0
local mhook h
local group g
local unit t 
    loop
    exitwhen i > ihook
        if ahook[i] != 0 then
            set h = ahook[i]
            //--run--//
            call h.Move()
        else
            set ahook[i] = ahook[ihook]
            set ahook[ihook] = 0
            set ihook = ihook - 1
            set i = i - 1 
        endif
    set i = i + 1
    endloop
    //call DestroyGroup(g)
    set g = null
    set t = null
endfunction

function Trig_HookC_Bool takes nothing returns boolean
    if GetSpellAbilityId() == 'A01D' then //Способность Мясной хук
        return true
    else
        return false
    endif
endfunction

function Trig_HookC_Actions takes nothing returns nothing
local mhook h
    set h = mhook.Create(GetSpellAbilityUnit(),GetSpellTargetX(),GetSpellTargetY(),110)
    call h.Start()
endfunction

function Init_Hook takes nothing returns nothing
local trigger t = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( t, function Trig_HookC_Actions )
    call TriggerAddCondition(t,function Trig_HookC_Bool)
    call TimerStart(CreateTimer(),0.025,true,function Engine)
endfunction

endlibrary
ответ
да юнит должен быть летающим,либо добавь и сразу удали способность привратиться в ворона затем меняй высоту
ответ
Всё, разобрался, вопрос снимаю)

23

» WarCraft 3 / Десинхронизация

Похожие вопросы:

ответ
EnergyFrost, пока не оптимизируешь все бж я даже смотреть не буду(мои однобуквенные переменные и то не так сильно вредят зрению как бж)
если думаешь что я прошу их просто удалить то поищи в гугле слово оптимизация
ответ
нет
это конверт из гуи?
ответ
Claw, SomeFire, Timoxxx, а теперь фокус
у него были гет локал плеер
я их убрал
но он карту после этого не тестил
говорит потестит после нового года
ответ
Решения не было найдено! Самый верный способ сделать свою систему улучшений для юнитов, разбивая их на группы по признаку кол-ва грани у кости и кол-во костей, и в зависимости от этого повышать урон

23

» WarCraft 3 / Анимки

Похожие вопросы:

ответ
Пушистый:
Как вариант, можешь рассмотреть прописывание собственных границ для модели. Сначала высчитай границы модели по ширине и длине с помощью War 3 Model Editor, а саму высоту изменяй, отталкиваясь от подсчетов программы.
Я психанул и прописал во всех анимках без обьекта границы стандартной формы, что мне помогло и со скейлом выделения и с полоской ХП. Но твой совет я уже видел, и даже упомянул сам - бесполезно менять высоту(по крайне мере, в анимке станда или общих границах, а так да).
ответ
у Сларка это даммик, который двигается вместе с ним, и потом ремувится
у Баланара - лопается, когда день наступает... присмотришь получше
ответ
включай анимацию через триггеры, ченнел всегда stand запускает, если есть время каста
ответ
Darknessay:
Hate:
через мдлвис можно делать видимость поверхностям, массово, МЕ для этого не нужен
Не замечал такой функции. Где она?

23

» WarCraft 3 / Индикатор здоровья

Похожие вопросы:

ответ
KaneThaumaturge:
Скорей всего от модели, и ее расположения, недавно качал модель нестандартную и индикатор очень сильно был опущен вниз.
и ещё от параметра «Строка состояния» в РО
ответ
Вопрос Закрыт
ответ
KoGader, зависит, как уже сказали, от разрешения экрана. У меня тоже исчезает, допустим.

23

» WarCraft 3 / Где ошибка

Похожие вопросы:

ответ
напиши создателю mdlvis
если найдёшь его а также у него будут исходники и желание фиксить баги то мб пофиксит
но скорее всего как минимум 2 и 3 пунктов будут отсутствовать
ответ
~8gabriel8:
Попробуй рецепт Боромира.
P. S. Мне не помогло, дал посмотреть модельщику.
Короче, модельщики тоже не знают. Один сообщил, что это модель из Доминиона, там работает. А почему в других картах глючит непонятно
P. P. S. Модельщик снова взялся разбираться с моделью. Оказалось, что они лишь внешне похожи. В Доминионе модель абсолютно такая же, но использует больше текстур. Возьми оттуда.
P. P. P. S. Ну всё, вопрос решён.
ответ
Нельзя передать переменную через таймер. Можно разве что число с плавающей запятой передать, но это сомнительно полезно. Используй глобальные переменные.
А можно передать локальную переменную на простую функцию?(вроде можно)
ответ
Не особо шарю, но :
-отключить антивирус
-переустанови jngp

23

» WarCraft 3 / группы предметов

Похожие вопросы:

ответ
Сдаётся мне что в таких недрах не ступала нога среднестатистического варкрафтера.

23

» WarCraft 3 / Урон героя 0

Похожие вопросы:

ответ
elzutar, сначала читаем статьи
и только потом задаём вопросы
лично я бы делал через 1 триггер и стек
это если муи
а если не муи то можно и без стека
вместо молота и дами можно давать баш с 100% шансом стана
в общем код переписать а автора в статьи
ответ
Есть специальный ресурс , в котором ты можешь заказать способность , которую не можешь сделать сам.
ответ
а нафига так много ифов?
если каждый лвл даёт по 12 пробегов цикла то не проще ли написать
цикл от 1 до 12*лвл способности
только лвл способности в локалке хранить надо
ошибка в том что в цикле используется глобальная переменная A
когда триггер работает он каждую секунду увеличивает значение A на 1
если триггер был запущен дважды то каждую секунду A увеличивается на 2
как только A достигает лимита(12*лвл способности) все циклы использующие переменную A завершаются
для того чтобы избавиться от этого бага надо юзать локальные переменные
у нас есть куча статей по локалкам, циклам, и прочей фигне
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
ответ
Steal nerves:
Нее, ошибся. Поройся в настройках игрока.
Если компьютер, то норм работает на юнитов (убивает с первого раза)
Если человек. Поставил в настройках игрока человека. то теперь не хочет чит работать. Видимо чит рассчитан на ботов, на игроков не предусмотрен.
Это можно использовать в качестве анти-чита. Но это полезно разве, что в сингл-плеере. Хотя читы тоже работают в сингле.
раскрыть
Еще поставил резервный. Отображается как нейтральный. Кликнул по нему, мой герой подошел - видимо хотел ударить, и герой резервного перешел на мою сторону. Чего это он? Я думал это резервные это 15-16 игроки, да чего там. Видимо этот переход работает на 1-12, не знаю. Впадлу проверять

23

» WarCraft 3 / Модификатор видимости

Похожие вопросы:

ответ
Спасибо всем за ответы и пояснения! Закрываю флудильню :с
ответ
В варкрафте нет функций, которые очищали бы переменные. Разберись с терминами.
Функция
native RemoveLocation takes location whichLocation returns nothing
Удаляет точку, а не очищает переменную.
За удаление модификатора видимости отвечает
native DestroyFogModifier takes fogmodifier whichFogModifier returns nothing

23

» WarCraft 3 / Стаки статов

Похожие вопросы:

ответ
Пункт " убить боевую единицу" отвечает за то сможет ли урон от яда убить Юнита, если флаг не установлен то у Юнита останется 1-2 хп. Но яд не может его убить.
Разумеется не работают яд. Стрелы на маг иммунитет, ибо это активный автокаст.
Чтобы автокаст стрелы работали на маг. Имун нужно чтобы способность относилась к герою, требуемый для изучения уровень был выше 1. Вот и все.

23

» WarCraft 3 / Урон от оружия

Похожие вопросы:

ответ
Возможно дело в лимите символов. Для кирилицы это серьезная проблема т.к. один кирилический символ занимает две позиции, другими словами лимит для русских надписей в два раза меньше реального.
Сразу скажу, эта проблема не решается. Частично помогает замена одинаковых символов, например "a" в латинице и кирилице выглядит одинаково, но занимает разное кол-во позиций.
ответ
кхе, всё вроде можно, но объяснять долго, третье простое, просто при юзании способности в триггерах добавь условие сравнения, если юнит цель применяемой способности нежить, тогда действие о дополнительном уроне, например если способность наносит 100, то 20% это 20,в действии приказать применяющий юнит нанести урон юнит цель применяемой способности 100+(0.20х100), перед этим 100 можно установить, как переменную, например если с каждым уровнем урон растёт на 100, то переменная int=100хУровень способности способность у применяющий юнит.
Сложно объяснил?

23

» WarCraft 3 / цель заклинания: предмет

Похожие вопросы:

ответ
Я так и сделал, не получалось потому, что надо два заклинания делать....
Один буферизуется другой нет... Еще один вопрос по теме, что значит буферизуется\не буферизуется? И можно тему закрывать.

23

» WarCraft 3 / Обнуление спецэффектов

Похожие вопросы:

ответ
мне кажется или афтар вообще не знает джасс но пытается писать на нём?
SсRealm, фильтр это булексп
SсRealm:
Правильно ли сделано в моем примере
нет
ты сам подумай
ты в цикле добавляешь юнита в группу а потом удаляешь группу
на следующей итерации пытаешься добавить в группу но группы нету
локальные переменные вообще нигде не юзаются
хз зачем они
в цикле же используется совсем другая группа
так что все действия с твоей группой бессмысленны ибо она нигде не используется
статьи надо читать полностью и по порядку
а не кусками
"я хз что такое переменные и как их юзать но сейчас уберу все утечки" не прокатит
короче прочти хотя бы первые 30 статей про jass и первые 20 про гуи
SсRealm:
обнуление pick every unit
где именно ты её обнуляешь
скрин строки в студию
короче вопрос пока что закрыт
подучи матчасть
потом вернёмся к этому вопросу (если он всё ещё будет после того как поймёшь как юзать переменные)

23

» WarCraft 3 / Использование SetUnitFlyHeight

Похожие вопросы:

ответ
nvc123:
Bornikkeny, сделал специально чтобы доказать тебе что ты несёшь бред
даже 2 скрина приложил
думаю закинуть библиотеки сможешь сам (в папку *твой jngp*\AdicHelper\lib)
Хорошо группы реализуешь как альтернативу unit[array]. Я тоже самое получил.
nvc123, и всё же твой хук не тот что мне нужен.
Я решил проблему, спасибо что дал идею обрабатывать движение внутри структуры, а не в стеке.
кот
library Hook initializer Init_Hook uses LibMath

globals
    mhook   ahook[100]
    integer ihook = -1
endglobals
    
struct mhook
        unit       host = null
        unit       target = null
        real       face = 0
        real       speed = 0
        real       dis = 0
        real       dismax = 0
        integer    chaini = 0
        unit       chain[50]
        real       scale = 0
        integer    move = 1
        integer    i = 0
		
		
        static method Create takes unit host, real tx, real ty, real scale returns mhook
        local mhook h = mhook.create()
        local integer i = GetPlayerId(GetOwningPlayer(host))
        local real x = GetUnitX(host)
        local real y = GetUnitY(host)
        local real f = GetAngleXY(x,y,tx,ty)
            set h.host = host
            set h.face = f
            set h.speed = 600
            set h.dismax = 1400
            set h.scale = scale
            set h.chain[0] = CreateUnit(Player(i),'h007',GetPolarX(GetUnitX(host),f,h.scale/2),GetPolarY(GetUnitY(host),f,h.scale/2),f)
            set h.i = i
            call UnitAddAbility(h.chain[0],'Amrf')
            call UnitAddAbility(h.chain[0],'Amrf')
            call SetUnitFlyHeight(h.chain[0],50,0)
            call SetUnitPathing(h.chain[0],false)
            return h
        endmethod
        
        method Start takes nothing returns boolean
            if ihook < 1000 then  
                set ihook = ihook + 1
                set ahook[ihook] = this
                return true
            else
                return false
            endif
        endmethod
        
        method Destroy takes nothing returns nothing
        local integer i = 0
            loop
            exitwhen i > ihook
                if ahook[i] == this then
                    set ahook[i] = ahook[ihook]
                    set ahook[ihook] = 0
                    set ihook = ihook - 1
                    set i = ihook // выход из цикла
                endif
            set i = i + 1
            endloop
            set this.target = null
            set this.host = null
            call this.destroy()
        endmethod
        
        method Move takes nothing returns nothing
        local integer i1 = 0
        local integer l = 0
        local real x
        local real y
        local real xh
        local real yh
        local real f
            if move == 1
                set dis = dis + speed*0.025
                loop
                 exitwhen i1 > .chaini
                    set x = GetUnitX(.chain[i1])
                    set y = GetUnitY(.chain[i1])
                    if i1 > 0 then
                        set f = GetAngleXY(x,y,GetUnitX(.chain[i1-1]),GetUnitY(.chain[i1-1]))
                        call SetUnitX(.chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(.chain[i1],GetPolarY(y,f,.speed*0.025))
                    else    
                        set f = face
                        call SetUnitX(chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(chain[i1],GetPolarY(y,f,.speed*0.025))
                    endif
                    call SetUnitFacing(chain[i1],f)
                 set i1 = i1 + 1
                endloop
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set f = GetAngleXY(GetUnitX(.host),GetUnitY(.host),x,y)
                set xh = GetPolarX(GetUnitX(.host),f,.scale/2)
                set yh = GetPolarY(GetUnitY(.host),f,.scale/2)
                //Create==================
                
                if GetDisXY(xh,yh,x,y) >= .scale/2 then
                    set chaini = chaini + 1
                    set chain[chaini] = CreateUnit(Player(.i),'h007',xh,yh,f)
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call SetUnitFlyHeight(.chain[.chaini],50,0)
                endif
                if dis > dismax then
                    set move = 0
                endif
            else
                //REVERSE=============
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                set chain[chaini+1] = host
                loop
                exitwhen l > chaini
                        set x = GetUnitX(chain[l])
                        set y = GetUnitY(chain[l])
                        //if chain[chaini] == null then
                        //    set f = GetAngleXY()
                        //endif
                        set f = GetAngleXY(x,y,GetUnitX(chain[l+1]),GetUnitY(chain[l+1]))
                        call SetUnitX(chain[l],GetPolarX(x,f,speed*0.025))
                        call SetUnitY(chain[l],GetPolarY(y,f,speed*0.025))
                        call SetUnitFacing(chain[l],f-180)
                set l = l + 1
                endloop
                //Destroy==================
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                if GetDisXY(GetUnitX(chain[chaini]),GetUnitY(chain[chaini]),GetUnitX(host),GetUnitY(host)) < 100 then
                    call RemoveUnit(chain[chaini])
                    set chain[chaini] = null
                    set chaini = chaini - 1
                    if chaini == -1 then
                        call .Destroy()
                    endif
                endif
            endif
        endmethod
        
endstruct

private function Engine takes nothing returns nothing
local integer i = 0
local mhook h
local group g
local unit t 
    loop
    exitwhen i > ihook
        if ahook[i] != 0 then
            set h = ahook[i]
            //--run--//
            call h.Move()
        else
            set ahook[i] = ahook[ihook]
            set ahook[ihook] = 0
            set ihook = ihook - 1
            set i = i - 1 
        endif
    set i = i + 1
    endloop
    //call DestroyGroup(g)
    set g = null
    set t = null
endfunction

function Trig_HookC_Bool takes nothing returns boolean
    if GetSpellAbilityId() == 'A01D' then //Способность Мясной хук
        return true
    else
        return false
    endif
endfunction

function Trig_HookC_Actions takes nothing returns nothing
local mhook h
    set h = mhook.Create(GetSpellAbilityUnit(),GetSpellTargetX(),GetSpellTargetY(),110)
    call h.Start()
endfunction

function Init_Hook takes nothing returns nothing
local trigger t = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( t, function Trig_HookC_Actions )
    call TriggerAddCondition(t,function Trig_HookC_Bool)
    call TimerStart(CreateTimer(),0.025,true,function Engine)
endfunction

endlibrary
ответ
Вариант по индексу не хотелось бы, ввиду использования для разных моделей.
Придётся. Walk не играется триггерно при нормальных условиях.
Впрочем можно заставить проигрывать walk поставив юниту скорость движения 0 в редакторе объектов.

23

» WarCraft 3 / Стандартные модели

Похожие вопросы:

ответ
Просто скопировать путь к модели у декорации - не выход, т.к. декорация имеет вариации, юниты - нет. Хотя если прописать конкретную вариацию декорации а не разрушаемого объекта - то отображается. Кажется в декорациях есть парочка деревьев.
ответ
Скорее всего никак. Если в импорте указать стандартный путь текстуры, то она заменится и будет недоступна.
ответ
Алексей777, легко. Заходим в редактор объектов, ищем пункт "Файл модели" (в этом случае - "units\creeps\NightElfBattleship\NightElfBattleship") и выковыриваем его из mpq.

23

» WarCraft 3 / Анимирование

Похожие вопросы:

ответ
У тебя не были проставлены кадры и положения текстуры. В прикрепленных файлах рабочая модель.
В war3me
ответ
Если скелет не изменен то можно не париться т.е. если ты только поменял текстуру пехотинца,а не саму модель
ответ
darkowlom, точно, я несколько лет назад тоже пробовал эту модель - так же исчезала при определённом AoA.
KaneThaumaturge, посмотри 38 комментарий в этой теме, может быть поможет.
ответ
Вообще-то и Texture manager и Sequence manager находятся в War3Modeleditor. "Windows" это не название ОС, это переводится как "окна".

23

» WarCraft 3 / Dissipate

Похожие вопросы:

ответ
это не стол заказов а модуль Q/A
с просьбой о помощи в модели на заказ (или как она там называется)

23

» WarCraft 3 / Compile error.

Похожие вопросы:

ответ
Может надо переустановить варик? Просто в Way of Others'е у меня было именно так я переустановил его и всё нормально.
А карту сохранить в другой папке.

23

» WarCraft 3 / Способность с зарядами.

Похожие вопросы:

ответ
задержался немног
вобщем там в разделе глобалс указываешь равкоды и время,скил лучше скопируй
триггер скопируешь в свою мапу
и код лучше не читай(вредит зрению)
ответ
Идеальный вариант чтобы игрок сам мог решать, нужно ли ему это. Сделай, если будет смотреться неплохо. И каким то образом запилить возможность выключения этой фичи.
ответ
Урон настраивается через уровень способности, или как было сказано unit - damage target
команда для использования нестандартной способности берется от той способности, на основе которой ты её сделал, и если это цепь тралла - Unit - issue order with targetign a unit - orc - chain lighting
ответ
У нас 3 абилки могут отображать счетчик зарядов, совы охотницы, ракеты у осадных гномов и баг с техникой (подходит для пассивок)
Далее тока куча абилок с разными иконками..
ответ
Очень просто, проверяем каст по приказу юза предмета и если цель неподходящая то дропаем предмет юниту под ноги, а потом заставляем подобрать его.

23

» Unity / Поиск объекта

Похожие вопросы:

ответ
Если я правильно понял, ты хочешь добавить в какой-либо массив юнита, который находится в триггере и соответствует некоторым условиям ( в данном случае tag = "Tag" и lvl = 5) ? Я тут использовал лист, т.к. с ним удобнее работать, но при желании ты можешь юзать статический массив.
код
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Test : MonoBehaviour {

    public List<GameObject> Units = new List<GameObject>();
    void OnTriggerStay2D(Collider2D col)
    {
        if (col.tag == "Tag" || col.GetComponent<MyComponent>().lvl == 5)
        {
            Units.Add(col.gameObject);
        }
    }

23

» WarCraft 3 / Отмена приказа предмета

Похожие вопросы:

ответ
Порядок строк ид приказа не сменить, это работает только у канала ибо это спец скилл для визуального эффекта. У морфов это работать не будет.

23

» WarCraft 3 / war3mapImported

Похожие вопросы:

ответ
Модель можешь расположить куда захочешь, а вот текстура должна быть в корне карты(в модели она так занесена).
\flag.blp
Должно работать, пробуй.